package com.sandu.mirrorapp.fragent

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
import com.sandu.lib_common.base.BaseVBFragment
import com.sandu.lib_common.base.appViewModel
import com.sandu.lib_common.ext.init
import com.sandu.lib_common.ext.initMain
import com.sandu.lib_common.ext.interceptLongClick
import com.sandu.lib_common.ext.setUiTheme
import com.sandu.mirrorapp.databinding.FragmentMainBinding
import com.sandu.mirrorapp.viewmodel.state.MainViewModel
import com.sandu.mirrorapp.R
import com.sandu.module_mall.frament.HomeFragment
import com.sandu.product.fragment.ProductListFragment
import com.sandu.user.fragment.MineFragment

/**
 * 时间　: 2024/12/27
 * 作者　: sandu
 * 描述　:项目主页Fragment
 */
class MainFragment : BaseVBFragment<MainViewModel, FragmentMainBinding>() {

    override fun initView(savedInstanceState: Bundle?) {
        var fragments: MutableList<Fragment> = arrayListOf()
        var fragment0 = FirstFragment(mViewBind.mainViewpager)
        var fragment1 = SecondFragment(mViewBind.mainViewpager)
        var fragment2 = HomeFragment(mViewBind.mainViewpager)
        var fragment3 = ProductListFragment(mViewBind.mainViewpager)
        var fragment4 = MineFragment(mViewBind.mainViewpager)

        fragments.add(fragment0)
        fragments.add(fragment1)
        fragments.add(fragment2)
        fragments.add(fragment3)
        fragments.add(fragment4)
        //初始化viewpager2
        mViewBind.mainViewpager.initMain(this, fragments)
        //初始化 bottomBar
        var bottomNav = mViewBind.root.findViewById<BottomNavigationViewEx>(R.id.mainBottom)
        bottomNav.init {
            when (it) {
                R.id.menu_main -> mViewBind.mainViewpager.setCurrentItem(0, false)
                R.id.menu_project -> mViewBind.mainViewpager.setCurrentItem(1, false)
                R.id.menu_system -> mViewBind.mainViewpager.setCurrentItem(2, false)
                R.id.menu_public -> mViewBind.mainViewpager.setCurrentItem(3, false)
                R.id.menu_me -> mViewBind.mainViewpager.setCurrentItem(4, false)
            }
        }
        mViewBind.mainBottom.interceptLongClick(
            R.id.menu_main,
            R.id.menu_project,
            R.id.menu_system,
            R.id.menu_public,
            R.id.menu_me
        )
        mViewBind.mainViewpager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
                // 当页面正在滑动时调用此方法
                // position: 当前滑动的页面索引
                // positionOffset: 页面滑动的偏移量，取值范围是0到1，表示从一个页面滑动到下一个页面的进度
                // positionOffsetPixels: 页面滑动的偏移像素数
                println("页面正在滑动，当前页面索引：$position，偏移量：$positionOffset，偏移像素数：$positionOffsetPixels")
            }

            override fun onPageSelected(position: Int) {
                // 当页面切换完成时调用此方法
                // position: 切换后选中的页面索引
                println("页面切换完成，选中页面索引：$position")
                when (position) {
                    0 -> mViewBind.mainBottom.selectedItemId = R.id.menu_main


                    1 -> mViewBind.mainBottom.selectedItemId = R.id.menu_project


                    2 -> mViewBind.mainBottom.selectedItemId = R.id.menu_system


                    3 -> mViewBind.mainBottom.selectedItemId = R.id.menu_public


                    4 -> mViewBind.mainBottom.selectedItemId = R.id.menu_me

                }
            }

            override fun onPageScrollStateChanged(state: Int) {
                // 当页面滑动状态改变时调用此方法
                // state: 滑动状态，有以下几种取值：
                // ViewPager2.SCROLL_STATE_IDLE: 页面静止，没有滑动
                // ViewPager2.SCROLL_STATE_DRAGGING: 页面正在被拖动
                // ViewPager2.SCROLL_STATE_SETTLING: 页面在惯性滑动后正在自动调整位置
                println("页面滑动状态改变，当前状态：$state")
            }
        });
    }

    override fun createObserver() {
        appViewModel.appColor.observeInFragment(this, Observer {
            setUiTheme(it, mViewBind.mainBottom)
        })
    }
}